

using System;
using System.Text;

using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;

using SpotifyGenNHibernate.EN.Spotify;
using SpotifyGenNHibernate.CAD.Spotify;

namespace SpotifyGenNHibernate.CEN.Spotify
{
        public partial class UsuarioCEN
        {
        private IUsuarioCAD _IUsuarioCAD;

        public UsuarioCEN(IUsuarioCAD _IUsuarioCAD)
        {
                this._IUsuarioCAD = _IUsuarioCAD;
        }

        public String Registrarse (String p_Nombre, String p_Contrasena, int p_Tipo, int p_colaReproduccion)
        {
                UsuarioEN usuarioEN = null;
                String oid;

                //Initialized UsuarioEN
                usuarioEN = new UsuarioEN ();
                usuarioEN.Nombre = p_Nombre;
                usuarioEN.Contrasena = p_Contrasena;
                usuarioEN.Tipo = p_Tipo;
                if (p_colaReproduccion != -1) {
                        usuarioEN.ColaReproduccion = new SpotifyGenNHibernate.EN.Spotify.ColaReproduccionEN ();
                        usuarioEN.ColaReproduccion.IdCola = p_colaReproduccion;
                }
                //Call to UsuarioCAD

                oid = _IUsuarioCAD.Registrarse (usuarioEN);
                return oid;
        }

        public void BorrarUsuario (String Nombre)
        {
                _IUsuarioCAD.BorrarUsuario (
                        Nombre

                        );
        }

        public void EditarUsuario (String p_Usuario_OID, String p_Contrasena, int p_Tipo)
        {
                UsuarioEN usuarioEN = null;

                //Initialized UsuarioEN
                usuarioEN = new UsuarioEN ();
                usuarioEN.Nombre = p_Usuario_OID;
                usuarioEN.Contrasena = p_Contrasena;
                usuarioEN.Tipo = p_Tipo;
                //Call to UsuarioCAD

                _IUsuarioCAD.EditarUsuario (usuarioEN);
        }

        public void ComprarCancion (String p_Usuario_OID, System.Collections.Generic.IList<int> p_cancion_OIDs)
        {
                //Call to UsuarioCAD

                _IUsuarioCAD.ComprarCancion (p_Usuario_OID, p_cancion_OIDs);
        }
        public void EscucharColaReproduccion (String p_Usuario_OID, int p_colaReproduccion_OID)
        {
                //Call to UsuarioCAD

                _IUsuarioCAD.EscucharColaReproduccion (p_Usuario_OID, p_colaReproduccion_OID);
        }
        public void EscucharRadio (String p_Usuario_OID, System.Collections.Generic.IList<String> p_radio_OIDs)
        {
                //Call to UsuarioCAD

                _IUsuarioCAD.EscucharRadio (p_Usuario_OID, p_radio_OIDs);
        }

        public UsuarioEN obtenerUsuario(String p_Usuario_OID)
        {
            //Call to UsuarioCAD

            return _IUsuarioCAD.ReadOIDDefault(p_Usuario_OID);
        }

        //Estado 0:Usuario Free
        //Estado 1:Usuario Open
        //Estado 2:Usuario Premiun
        public bool ValidarEstado(string evento, int estado)
        {
            bool correcto = false;

            if ((estado == 0)||(estado==2))
            {
                if (evento.Equals("BorrarSubscripcion"))
                {
                    throw new Exception("No puede realizar el evento " + evento + " desde este usuario");
                }
                else
                {
                    correcto = true;
                }
            }

            if (estado == 1)
            {
                if (evento.Equals("RealizarSubscripcion"))
                {
                    throw new Exception("No puede realizar el evento " + evento + " desde este usuario");
                }
                else
                {
                    correcto = true;
                }
            }

            return correcto;
        }


        }
}
